package compilador.gerador.comando;

import static compilador.gerador.GeradorDeCodigo.INVARIANTE_SEM_NOME;
import compilador.Command;
import compilador.CommandException;
import compilador.gerador.ClasseCodigo;
import compilador.gerador.GeradorDeCodigo;
import compilador.gerador.GeradorDeCodigoColecao;
import compilador.gerador.GeradorDeCodigoColecao.OperacaoColecao;

public class GeraCodigoColecaoCommand implements Command {

	private final static String MARK = "#";
	
	@Override
	public void run(String... args) throws CommandException {
		GeradorDeCodigo gCodigo = GeradorDeCodigo.getInstance();
		GeradorDeCodigoColecao gCC = GeradorDeCodigoColecao.getInstance();
		gCC.salvaExpressao(gCodigo.getMarked(MARK));
		gCodigo.removeMarked(MARK);
		
		OperacaoColecao op = OperacaoColecao.valueOf(args[0].toUpperCase());
		ClasseCodigo code = gCodigo.getClasseCodigo();
		String invName = INVARIANTE_SEM_NOME+code.getNextInvNumber();
		code.addInv(gCC.geraCodigo(invName, op));	
		gCodigo.appendCode("this." + invName + "()");

	}

}
